﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ZedGraph;

namespace PhysicsFmuDeluxeDotNet.Modulos.Funcoes
{
    public partial class Funcoes : Form
    {
        public Funcoes()
        {
            InitializeComponent();
        }

        //Fechar janela
        private void sairToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Funcoes_Load(object sender, EventArgs e)
        {
            //Código realizado ao carregar form
        }

        //Evento de ativar o x^5
        private void cbx5Ativar_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Se ativado, destravar
            if (cbx5Ativar.SelectedItem.ToString() == "Ativado")
            {
                txtx5.Enabled = true;
                lblx5.Enabled = true;
            }
            //Se desativado, travar e marcar x = 0 para o cálculo
            else
            {
                txtx5.Enabled = false;
                lblx5.Enabled = false;
                txtx5.Text = "0";
            }
        }

        //Evento de ativar o x^4
        private void cbx4Ativar_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Se ativado, destravar
            if (cbx4Ativar.SelectedItem.ToString() == "Ativado")
            {
                txtx4.Enabled = true;
                lblx4.Enabled = true;
            }
            //Se desativado, travar e marcar x = 0 para o cálculo
            else
            {
                txtx4.Enabled = false;
                lblx4.Enabled = false;
                txtx4.Text = "0";
            }
        }

        //Evento de ativar o x^3
        private void cbx3Ativar_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Se ativado, destravar
            if (cbx3Ativar.SelectedItem.ToString() == "Ativado")
            {
                txtx3.Enabled = true;
                lblx3.Enabled = true;
            }
            //Se desativado, travar e marcar x = 0 para o cálculo
            else
            {
                txtx3.Enabled = false;
                lblx3.Enabled = false;
                txtx3.Text = "0";
            }
        }

        //Evento de ativar o x^2
        private void cbx2Ativar_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Se ativado, destravar
            if (cbx2Ativar.SelectedItem.ToString() == "Ativado")
            {
                txtx2.Enabled = true;
                lblx2.Enabled = true;
            }
            //Se desativado, travar e marcar x = 0 para o cálculo
            else
            {
                txtx2.Enabled = false;
                lblx2.Enabled = false;
                txtx2.Text = "0";
            }
        }

        //Evento de ativar o x^1
        private void cbx1Ativar_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Se ativado, destravar
            if (cbx1Ativar.SelectedItem.ToString() == "Ativado")
            {
                txtx1.Enabled = true;
                lblx1.Enabled = true;
            }
            //Se desativado, travar e marcar x = 0 para o cálculo
            else
            {
                txtx1.Enabled = false;
                lblx1.Enabled = false;
                txtx1.Text = "0";
            }
        }

        //Evento de ativar a constante
        private void cbConstanteAtivar_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Se ativado, destravar
            if (cbConstanteAtivar.SelectedItem.ToString() == "Ativado")
            {
                txtConstante.Enabled = true;
            }
            //Se desativado, travar e marcar x = 0 para o cálculo
            else
            {
                txtConstante.Enabled = false;
                txtConstante.Text = "0";
            }
        }

        //Algorítmo para o cálculo das raízes e desenho do gráfico
        private void btnCalcular_Click(object sender, EventArgs e)
        {
            /*** Plotagem do gráfico ***/
            //Declaração dos eixo X, Y e das variáveis de controle para plotagem do gráfico
            double eixoX, eixoY;

            //Declaração de vetor para checagem dos campos de texto para o TryParse e das variaveis para o resultado
            List<bool> checagemNumeros = new List<bool>();

            double x5Entrada, x4Entrada, x3Entrada, x2Entrada, x1Entrada, constanteEntrada, xMenorQueEntrada, xMaiorQueEntrada;

            //Atribuindo true/false na lista de checagem
            checagemNumeros.Add(double.TryParse(txtx5.Text, out x5Entrada));
            checagemNumeros.Add(double.TryParse(txtx4.Text, out x4Entrada));
            checagemNumeros.Add(double.TryParse(txtx3.Text, out x3Entrada));
            checagemNumeros.Add(double.TryParse(txtx2.Text, out x2Entrada));
            checagemNumeros.Add(double.TryParse(txtx1.Text, out x1Entrada));
            checagemNumeros.Add(double.TryParse(txtConstante.Text, out constanteEntrada));
            checagemNumeros.Add(double.TryParse(txtxMaiorQue.Text, out xMaiorQueEntrada));
            checagemNumeros.Add(double.TryParse(txtxMenorQue.Text, out xMenorQueEntrada));

            //Se alguma checagem falhar, exibir mensagem de erro (ou seja, se algum item da lista tiver false)
            if (checagemNumeros.Contains(false))
            {
                ConfirmarDados confirmarDados = new ConfirmarDados();
                confirmarDados.ShowDialog();
            }
            //TODO: Prevenir uso de valores altos demais para gerar o gráfico
            //TODO: Checar de xMaiorQueEntrada não é maior que xMenorQueEntrada, ou fazer com que eles tenham um intervalo mínimo de distância

            //Senão, continuar com o código
            else
            {
                //Estanciando painelXY do tipo graficoXY.GraphPane
                GraphPane painelXY = graficoXY.GraphPane;

                //Limpar todos os gráficos atuais, para reexibição, caso o usuário calcule um novo vetor resultante
                painelXY.CurveList.Clear();

                //Título do gráfico
                painelXY.Title.Text = "Gráfico de F(x)";

                //Linha a ser desenhada no gráfico
                PointPairList listaXY = new PointPairList();

                //Adicionando valores com base no limite setado pelo usuário
                double i; //Variável de controle
                for (i = xMaiorQueEntrada; i <= xMenorQueEntrada; i++)
                {
                    //Cálculo do eixo y
                    eixoY = x5Entrada * Math.Pow(i, 5) +
                        x4Entrada * Math.Pow(i, 4) +
                        x3Entrada * Math.Pow(i, 3) +
                        x2Entrada * Math.Pow(i, 2) +
                        x1Entrada * i +
                        constanteEntrada;

                    //Nomeando eixo x (só para entender melhor)
                    eixoX = i;

                    //Adicionando ponto na lista
                    listaXY.Add(eixoX, eixoY);
                }

                //Gerar uma linha com o ponto em formato de um diamante, e com o nome de "F(x)"
                LineItem linhaVetorA = painelXY.AddCurve("F(x)", listaXY, System.Drawing.Color.Red, SymbolType.Diamond);

                //Mostrar o grid no grafico xy
                painelXY.XAxis.MajorGrid.IsVisible = true;
                painelXY.YAxis.MajorGrid.IsVisible = true;

                //Mostrar pontos quando passar o mouse sobre eles
                graficoXY.IsShowPointValues = true;

                //Desenhar o gráfico e setar ele como visível
                graficoXY.AxisChange();
                graficoXY.Invalidate();
                graficoXY.Visible = true;

                //Redimensionar form (aumentar sua altura para 539 pixels)
                this.Size = new Size(this.Size.Width, 539);

                //Centralizar form usando CenterToScreen()
                this.CenterToScreen();
            }
        }

        private void btnSeno_Click(object sender, EventArgs e)
        {
            /*** Plotagem do gráfico ***/
            //Declaração dos eixo X, Y e das variáveis de controle para plotagem do gráfico
            double eixoX, eixoY;

            //Declaração de vetor para checagem dos campos de texto para o TryParse e das variaveis para o resultado
            List<bool> checagemNumeros = new List<bool>();

            double xMenorQueEntrada, xMaiorQueEntrada;

            //Atribuindo true/false na lista de checagem
            checagemNumeros.Add(double.TryParse(txtxMaiorQue.Text, out xMaiorQueEntrada));
            checagemNumeros.Add(double.TryParse(txtxMenorQue.Text, out xMenorQueEntrada));

            //Se alguma checagem falhar, exibir mensagem de erro (ou seja, se algum item da lista tiver false)
            if (checagemNumeros.Contains(false))
            {
                ConfirmarDados confirmarDados = new ConfirmarDados();
                confirmarDados.ShowDialog();
            }
            //TODO: Prevenir uso de valores altos demais para gerar o gráfico
            //TODO: Checar de xMaiorQueEntrada não é maior que xMenorQueEntrada, ou fazer com que eles tenham um intervalo mínimo de distância

            //Senão, continuar com o código
            else
            {
                //Estanciando painelXY do tipo graficoXY.GraphPane
                GraphPane painelXY = graficoXY.GraphPane;

                //Limpar todos os gráficos atuais, para reexibição, caso o usuário calcule um novo vetor resultante
                painelXY.CurveList.Clear();

                //Título do gráfico
                painelXY.Title.Text = "Gráfico de Sen(x)";

                //Linha a ser desenhada no gráfico
                PointPairList listaXY = new PointPairList();

                //Adicionando valores com base no limite setado pelo usuário
                double i = xMaiorQueEntrada; //Variável de controle
                while (i <= xMenorQueEntrada)
                {
                    //Cálculo do eixo y
                    eixoY = Math.Sin(i);

                    //Nomeando eixo x (só para entender melhor)
                    eixoX = i;

                    //Adicionando ponto na lista
                    listaXY.Add(eixoX, eixoY);

                    //Incremento de 0.1 em i
                    i = i + 0.1;
                }

                //Gerar uma linha com o ponto em formato de um diamante, e com o nome de "F(x)"
                LineItem linhaVetorA = painelXY.AddCurve("Sen(x)", listaXY, System.Drawing.Color.Red, SymbolType.Diamond);

                //Mostrar o grid no grafico xy
                painelXY.XAxis.MajorGrid.IsVisible = true;
                painelXY.YAxis.MajorGrid.IsVisible = true;

                //Mostrar pontos quando passar o mouse sobre eles
                graficoXY.IsShowPointValues = true;

                //Desenhar o gráfico e setar ele como visível
                graficoXY.AxisChange();
                graficoXY.Invalidate();
                graficoXY.Visible = true;

                //Redimensionar form (aumentar sua altura para 539 pixels)
                this.Size = new Size(this.Size.Width, 539);

                //Centralizar form usando CenterToScreen()
                this.CenterToScreen();
            }
        }

        private void btnCosseno_Click(object sender, EventArgs e)
        {
            //TODO: Gráfico do cosseno

            /*** Plotagem do gráfico ***/
            //Declaração dos eixo X, Y e das variáveis de controle para plotagem do gráfico
            double eixoX, eixoY;

            //Declaração de vetor para checagem dos campos de texto para o TryParse e das variaveis para o resultado
            List<bool> checagemNumeros = new List<bool>();

            double xMenorQueEntrada, xMaiorQueEntrada;

            //Atribuindo true/false na lista de checagem
            checagemNumeros.Add(double.TryParse(txtxMaiorQue.Text, out xMaiorQueEntrada));
            checagemNumeros.Add(double.TryParse(txtxMenorQue.Text, out xMenorQueEntrada));

            //Se alguma checagem falhar, exibir mensagem de erro (ou seja, se algum item da lista tiver false)
            if (checagemNumeros.Contains(false))
            {
                ConfirmarDados confirmarDados = new ConfirmarDados();
                confirmarDados.ShowDialog();
            }
            //TODO: Prevenir uso de valores altos demais para gerar o gráfico
            //TODO: Checar de xMaiorQueEntrada não é maior que xMenorQueEntrada, ou fazer com que eles tenham um intervalo mínimo de distância

            //Senão, continuar com o código
            else
            {
                //Estanciando painelXY do tipo graficoXY.GraphPane
                GraphPane painelXY = graficoXY.GraphPane;

                //Limpar todos os gráficos atuais, para reexibição, caso o usuário calcule um novo vetor resultante
                painelXY.CurveList.Clear();

                //Título do gráfico
                painelXY.Title.Text = "Gráfico de Cos(x)";

                //Linha a ser desenhada no gráfico
                PointPairList listaXY = new PointPairList();

                //Adicionando valores com base no limite setado pelo usuário
                double i = xMaiorQueEntrada; //Variável de controle
                while (i <= xMenorQueEntrada)
                {
                    //Cálculo do eixo y
                    eixoY = Math.Cos(i);

                    //Nomeando eixo x (só para entender melhor)
                    eixoX = i;

                    //Adicionando ponto na lista
                    listaXY.Add(eixoX, eixoY);

                    //Incremento de 0.1 em i
                    i = i + 0.1;
                }

                //Gerar uma linha com o ponto em formato de um diamante, e com o nome de "F(x)"
                LineItem linhaVetorA = painelXY.AddCurve("Cos(x)", listaXY, System.Drawing.Color.Red, SymbolType.Diamond);

                //Mostrar o grid no grafico xy
                painelXY.XAxis.MajorGrid.IsVisible = true;
                painelXY.YAxis.MajorGrid.IsVisible = true;

                //Mostrar pontos quando passar o mouse sobre eles
                graficoXY.IsShowPointValues = true;

                //Desenhar o gráfico e setar ele como visível
                graficoXY.AxisChange();
                graficoXY.Invalidate();
                graficoXY.Visible = true;

                //Redimensionar form (aumentar sua altura para 539 pixels)
                this.Size = new Size(this.Size.Width, 539);

                //Centralizar form usando CenterToScreen()
                this.CenterToScreen();
            }
        }

        private void btnTangente_Click(object sender, EventArgs e)
        {
            //TODO: Gráfico da tangente

            /*** Plotagem do gráfico ***/
            //Declaração dos eixo X, Y e das variáveis de controle para plotagem do gráfico
            double eixoX, eixoY;

            //Declaração de vetor para checagem dos campos de texto para o TryParse e das variaveis para o resultado
            List<bool> checagemNumeros = new List<bool>();

            double xMenorQueEntrada, xMaiorQueEntrada;

            //Atribuindo true/false na lista de checagem
            checagemNumeros.Add(double.TryParse(txtxMaiorQue.Text, out xMaiorQueEntrada));
            checagemNumeros.Add(double.TryParse(txtxMenorQue.Text, out xMenorQueEntrada));

            //Se alguma checagem falhar, exibir mensagem de erro (ou seja, se algum item da lista tiver false)
            if (checagemNumeros.Contains(false))
            {
                ConfirmarDados confirmarDados = new ConfirmarDados();
                confirmarDados.ShowDialog();
            }
            //TODO: Prevenir uso de valores altos demais para gerar o gráfico
            //TODO: Checar de xMaiorQueEntrada não é maior que xMenorQueEntrada, ou fazer com que eles tenham um intervalo mínimo de distância

            //Senão, continuar com o código
            else
            {
                //Estanciando painelXY do tipo graficoXY.GraphPane
                GraphPane painelXY = graficoXY.GraphPane;

                //Limpar todos os gráficos atuais, para reexibição, caso o usuário calcule um novo vetor resultante
                painelXY.CurveList.Clear();

                //Título do gráfico
                painelXY.Title.Text = "Gráfico de Tg(x)";

                //Linha a ser desenhada no gráfico
                PointPairList listaXY = new PointPairList();

                //Adicionando valores com base no limite setado pelo usuário
                double i = xMaiorQueEntrada; //Variável de controle
                while (i <= xMenorQueEntrada)
                {
                    //Cálculo do eixo y
                    eixoY = Math.Tan(i);

                    //Nomeando eixo x (só para entender melhor)
                    eixoX = i;

                    //Adicionando ponto na lista
                    listaXY.Add(eixoX, eixoY);

                    //Incremento de 0.1 em i
                    i = i + 0.1;
                }

                //Gerar uma linha com o ponto em formato de um diamante, e com o nome de "F(x)"
                LineItem linhaVetorA = painelXY.AddCurve("Tg(x)", listaXY, System.Drawing.Color.Red, SymbolType.Diamond);

                //Mostrar o grid no grafico xy
                painelXY.XAxis.MajorGrid.IsVisible = true;
                painelXY.YAxis.MajorGrid.IsVisible = true;

                //Mostrar pontos quando passar o mouse sobre eles
                graficoXY.IsShowPointValues = true;

                //Desenhar o gráfico e setar ele como visível
                graficoXY.AxisChange();
                graficoXY.Invalidate();
                graficoXY.Visible = true;

                //Redimensionar form (aumentar sua altura para 539 pixels)
                this.Size = new Size(this.Size.Width, 539);

                //Centralizar form usando CenterToScreen()
                this.CenterToScreen();
            }
        }

        private void btnSecante_Click(object sender, EventArgs e)
        {
            //TODO: Gráfico da secante

            /*** Plotagem do gráfico ***/
            //Declaração dos eixo X, Y e das variáveis de controle para plotagem do gráfico
            double eixoX, eixoY;

            //Declaração de vetor para checagem dos campos de texto para o TryParse e das variaveis para o resultado
            List<bool> checagemNumeros = new List<bool>();

            double xMenorQueEntrada, xMaiorQueEntrada;

            //Atribuindo true/false na lista de checagem
            checagemNumeros.Add(double.TryParse(txtxMaiorQue.Text, out xMaiorQueEntrada));
            checagemNumeros.Add(double.TryParse(txtxMenorQue.Text, out xMenorQueEntrada));

            //Se alguma checagem falhar, exibir mensagem de erro (ou seja, se algum item da lista tiver false)
            if (checagemNumeros.Contains(false))
            {
                ConfirmarDados confirmarDados = new ConfirmarDados();
                confirmarDados.ShowDialog();
            }
            //TODO: Prevenir uso de valores altos demais para gerar o gráfico
            //TODO: Checar de xMaiorQueEntrada não é maior que xMenorQueEntrada, ou fazer com que eles tenham um intervalo mínimo de distância

            //Senão, continuar com o código
            else
            {
                //Estanciando painelXY do tipo graficoXY.GraphPane
                GraphPane painelXY = graficoXY.GraphPane;

                //Limpar todos os gráficos atuais, para reexibição, caso o usuário calcule um novo vetor resultante
                painelXY.CurveList.Clear();

                //Título do gráfico
                painelXY.Title.Text = "Gráfico de Sec(x)";

                //Linha a ser desenhada no gráfico
                PointPairList listaXY = new PointPairList();

                //Adicionando valores com base no limite setado pelo usuário
                double i = xMaiorQueEntrada; //Variável de controle
                while (i <= xMenorQueEntrada)
                {
                    //Cálculo do eixo y
                    eixoY = 1 / Math.Cos(i);

                    //Nomeando eixo x (só para entender melhor)
                    eixoX = i;

                    //Adicionando ponto na lista
                    listaXY.Add(eixoX, eixoY);

                    //Incremento de 0.1 em i
                    i = i + 0.1;
                }

                //Gerar uma linha com o ponto em formato de um diamante, e com o nome de "F(x)"
                LineItem linhaVetorA = painelXY.AddCurve("Sec(x)", listaXY, System.Drawing.Color.Red, SymbolType.Diamond);

                //Mostrar o grid no grafico xy
                painelXY.XAxis.MajorGrid.IsVisible = true;
                painelXY.YAxis.MajorGrid.IsVisible = true;

                //Mostrar pontos quando passar o mouse sobre eles
                graficoXY.IsShowPointValues = true;

                //Desenhar o gráfico e setar ele como visível
                graficoXY.AxisChange();
                graficoXY.Invalidate();
                graficoXY.Visible = true;

                //Redimensionar form (aumentar sua altura para 539 pixels)
                this.Size = new Size(this.Size.Width, 539);

                //Centralizar form usando CenterToScreen()
                this.CenterToScreen();
            }
        }

        private void btnCossecante_Click(object sender, EventArgs e)
        {
            //TODO: Gráfico da cossecante

            /*** Plotagem do gráfico ***/
            //Declaração dos eixo X, Y e das variáveis de controle para plotagem do gráfico
            double eixoX, eixoY;

            //Declaração de vetor para checagem dos campos de texto para o TryParse e das variaveis para o resultado
            List<bool> checagemNumeros = new List<bool>();

            double xMenorQueEntrada, xMaiorQueEntrada;

            //Atribuindo true/false na lista de checagem
            checagemNumeros.Add(double.TryParse(txtxMaiorQue.Text, out xMaiorQueEntrada));
            checagemNumeros.Add(double.TryParse(txtxMenorQue.Text, out xMenorQueEntrada));

            //Se alguma checagem falhar, exibir mensagem de erro (ou seja, se algum item da lista tiver false)
            if (checagemNumeros.Contains(false))
            {
                ConfirmarDados confirmarDados = new ConfirmarDados();
                confirmarDados.ShowDialog();
            }
            //TODO: Prevenir uso de valores altos demais para gerar o gráfico
            //TODO: Checar de xMaiorQueEntrada não é maior que xMenorQueEntrada, ou fazer com que eles tenham um intervalo mínimo de distância

            //Senão, continuar com o código
            else
            {
                //Estanciando painelXY do tipo graficoXY.GraphPane
                GraphPane painelXY = graficoXY.GraphPane;

                //Limpar todos os gráficos atuais, para reexibição, caso o usuário calcule um novo vetor resultante
                painelXY.CurveList.Clear();

                //Título do gráfico
                painelXY.Title.Text = "Gráfico de Cossec(x)";

                //Linha a ser desenhada no gráfico
                PointPairList listaXY = new PointPairList();

                //Adicionando valores com base no limite setado pelo usuário
                double i = xMaiorQueEntrada; //Variável de controle
                while (i <= xMenorQueEntrada)
                {
                    //Cálculo do eixo y
                    eixoY = 1 / Math.Sin(i);

                    //Nomeando eixo x (só para entender melhor)
                    eixoX = i;

                    //Adicionando ponto na lista
                    listaXY.Add(eixoX, eixoY);

                    //Incremento de 0.1 em i
                    i = i + 0.1;
                }

                //Gerar uma linha com o ponto em formato de um diamante, e com o nome de "F(x)"
                LineItem linhaVetorA = painelXY.AddCurve("Cossec(x)", listaXY, System.Drawing.Color.Red, SymbolType.Diamond);

                //Mostrar o grid no grafico xy
                painelXY.XAxis.MajorGrid.IsVisible = true;
                painelXY.YAxis.MajorGrid.IsVisible = true;

                //Mostrar pontos quando passar o mouse sobre eles
                graficoXY.IsShowPointValues = true;

                //Desenhar o gráfico e setar ele como visível
                graficoXY.AxisChange();
                graficoXY.Invalidate();
                graficoXY.Visible = true;

                //Redimensionar form (aumentar sua altura para 539 pixels)
                this.Size = new Size(this.Size.Width, 539);

                //Centralizar form usando CenterToScreen()
                this.CenterToScreen();
            }
        }

        private void btnCotangente_Click(object sender, EventArgs e)
        {
            //TODO: Gráfico da cotangente

            /*** Plotagem do gráfico ***/
            //Declaração dos eixo X, Y e das variáveis de controle para plotagem do gráfico
            double eixoX, eixoY;

            //Declaração de vetor para checagem dos campos de texto para o TryParse e das variaveis para o resultado
            List<bool> checagemNumeros = new List<bool>();

            double xMenorQueEntrada, xMaiorQueEntrada;

            //Atribuindo true/false na lista de checagem
            checagemNumeros.Add(double.TryParse(txtxMaiorQue.Text, out xMaiorQueEntrada));
            checagemNumeros.Add(double.TryParse(txtxMenorQue.Text, out xMenorQueEntrada));

            //Se alguma checagem falhar, exibir mensagem de erro (ou seja, se algum item da lista tiver false)
            if (checagemNumeros.Contains(false))
            {
                ConfirmarDados confirmarDados = new ConfirmarDados();
                confirmarDados.ShowDialog();
            }
            //TODO: Prevenir uso de valores altos demais para gerar o gráfico
            //TODO: Checar de xMaiorQueEntrada não é maior que xMenorQueEntrada, ou fazer com que eles tenham um intervalo mínimo de distância

            //Senão, continuar com o código
            else
            {
                //Estanciando painelXY do tipo graficoXY.GraphPane
                GraphPane painelXY = graficoXY.GraphPane;

                //Limpar todos os gráficos atuais, para reexibição, caso o usuário calcule um novo vetor resultante
                painelXY.CurveList.Clear();

                //Título do gráfico
                painelXY.Title.Text = "Gráfico de Cotg(x)";

                //Linha a ser desenhada no gráfico
                PointPairList listaXY = new PointPairList();

                //Adicionando valores com base no limite setado pelo usuário
                double i = xMaiorQueEntrada; //Variável de controle
                while (i <= xMenorQueEntrada)
                {
                    //Cálculo do eixo y
                    eixoY = 1 / Math.Tan(i);

                    //Nomeando eixo x (só para entender melhor)
                    eixoX = i;

                    //Adicionando ponto na lista
                    listaXY.Add(eixoX, eixoY);

                    //Incremento de 0.1 em i
                    i = i + 0.1;
                }

                //Gerar uma linha com o ponto em formato de um diamante, e com o nome de "F(x)"
                LineItem linhaVetorA = painelXY.AddCurve("Cotg(x)", listaXY, System.Drawing.Color.Red, SymbolType.Diamond);

                //Mostrar o grid no grafico xy
                painelXY.XAxis.MajorGrid.IsVisible = true;
                painelXY.YAxis.MajorGrid.IsVisible = true;

                //Mostrar pontos quando passar o mouse sobre eles
                graficoXY.IsShowPointValues = true;

                //Desenhar o gráfico e setar ele como visível
                graficoXY.AxisChange();
                graficoXY.Invalidate();
                graficoXY.Visible = true;

                //Redimensionar form (aumentar sua altura para 539 pixels)
                this.Size = new Size(this.Size.Width, 539);

                //Centralizar form usando CenterToScreen()
                this.CenterToScreen();
            }
        }
    }
}
